n的阶乘位数的简化表达

您所在的位置:网站首页 阶乘化简常用公式 n-1 n !! n的阶乘位数的简化表达

n的阶乘位数的简化表达

2024-03-19 19:28| 来源: 网络整理| 查看: 265

这是根据杭电阶乘位数改的题目 在这里插入图片描述 有矩阵知识(代数余子式啥的)可得逆推: 22的时候有两种对角形式 33的时候代数余子式按1行或按1列展开就是3个位置和三个22的形式所以就是23=6种方案 以此类推这就是N*N的方案书就是N! n ! = 2 π n ( n e ) n n!=\sqrt{2\pi n}(\frac{n}{e})^n n!=2πn ​(en​)n 不计算值,只计算位数,所以想到两边开 l g lg lg l g ( n ! ) = l g ( 1 ) + l g ( 2 ) + . . . + l g ( n ) = 1 2 l g ( 2 π n ) + n l g ( n e ) = l g _ n _ v a l u e lg(n!)=lg(1)+lg(2)+...+lg(n)=\frac{1}{2}lg({2\pi n})+nlg(\frac{n}{e})=lg\_n\_value lg(n!)=lg(1)+lg(2)+...+lg(n)=21​lg(2πn)+nlg(en​)=lg_n_value 位数就是上述数字的值向下取整+1 − > -> −> a n s = ⌊ l g _ n _ v a l u e ⌋ + 1 ans = \lfloor lg\_n\_value\rfloor+1 ans=⌊lg_n_value⌋+1

哦对了,如果想知道那个式子为啥,看斯特林公式,有一说一我还看不懂(没敢看,有点嘚)

代码:

/* * @Descripttion: * @Author: ssw * @Date: 2020-11-28 00:21:11 * @LastEditors: ssw * @LastEditTime: 2021-01-06 16:28:41 */ #include using namespace std; using ll = long long; const double PI = acos(-1); ll T,N; int Stirling(double n){ double ans = log10(2 * PI * n) / 2 + n * log10(n / exp(1)); return floor(ans)+1; } int main() { // freopen("1.in", "r", stdin); // freopen("1.out", "w", stdout); cin >> T; while(T--) { cin >> N; cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3